/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.ekaaty.dao;

import br.com.ekaaty.bean.Pessoa;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author otavio
 */
public class PessoaDao extends CRUDGeneric<Pessoa> {

    @Override
    public Pessoa recuperar(int cod) {
        OpenSession();
        bean = (Pessoa) session.get(Pessoa.class, cod);
        CloseSession();
        return bean;
    }

    @Override
    public List<Pessoa> listar() {
        OpenSession();
        String sql = "from Pessoa  where evento.data >=:data";
        List<Pessoa> pessoas = session.createQuery(sql).setDate("data", new Date()).list();
        CloseSession();
        return pessoas;
    }

    @Override
    public boolean ehUnico(Pessoa bean) {
        OpenSession();
        String sql = "from Pessoa  where nome =:nome and  email =:mail and evento.codigo =:evento";
        List<Pessoa> pessoas = session.createQuery(sql).setString("nome", bean.getNome()).setString("mail", bean.getEmail()).setInteger("evento", bean.getEvento().getCodigo()).list();
        CloseSession();
        if (pessoas.size() == 0) {
            return true;
        } else {
            return false;
        }
    }

    public void presente() {
        OpenSession();
        bean.setPresente(true);
        session.update(bean);
        CloseSession();

    }

    public List getBuscarListaPresente(Pessoa pessoa) {


        List<Pessoa> participantes = new ArrayList<Pessoa>();
        bean = pessoa;
        if (bean.getEvento()==null) {
            return participantes;
        }
        String nome = pessoa.getNome() == null ? "" : pessoa.getNome();
        OpenSession();
        Criteria criteria = session.createCriteria(Pessoa.class);
        criteria.add(Restrictions.eq("evento.codigo", bean.getEvento().getCodigo()));
        //   criteria.add(Restrictions.eq("presente", false));
        if (!"".equals(nome) && nome.length() > 2) {
            nome = "%" + nome + "%";
            criteria.add(Restrictions.like("nome", nome));
        }
        participantes = criteria.list();
        CloseSession();
        return participantes;
    }

    public boolean ehEmailUnico(Pessoa pessoa) {
        OpenSession();
        String sql = "from Pessoa where  email =:mail and evento.codigo =:evento";

        List<Pessoa> pessoas = session.createQuery(sql).setString("mail", pessoa.getEmail()).setInteger("evento", pessoa.getEvento().getCodigo()).list();
        CloseSession();
        if (pessoas.size() == 0) {
            return true;
        } else {
            return false;
        }
    }
}
